home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************
- ********************** BGUI DIGITAL CLOCK WINDOW **********************
- ************************************************************************/
-
- #include <exec/types.h>
- #include <dos/datetime.h>
- #include <intuition/intuition.h>
- #include <intuition/classes.h>
- #include <intuition/classusr.h>
- #include <intuition/imageclass.h>
- #include <intuition/gadgetclass.h>
- #include <intuition/intuitionbase.h>
- #include <libraries/bgui.h>
- #include <libraries/bgui_macros.h>
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/bgui.h>
- #include <proto/wb.h>
- #include <string.h>
-
-
- #include "yak.h"
- #include "version.h"
- #include "gui.h"
- #include "DigitalClock_window.h"
- #include "DigitalClock.h"
- #include "Hotkey_types.h"
- #include "yak_locale_strings.h"
-
- /************************************************************************
- ***************************** REFERENCES ******************************
- ************************************************************************/
-
- IMPORT LONG (*HandleReturnID)(LONG ID);
-
- /* Online help system */
- IMPORT void ShowYakHelp(char *, char *);
- IMPORT char *PrefsHelp;
-
- /************************************************************************
- ***************************** LOCAL DATA ******************************
- ************************************************************************/
-
- struct Window *DigitalClockWnd = NULL;
- Object *DigitalClockWndObj = NULL;
- Object *DigitalClockObjects[DigitalClock_CNT];
- struct IBox DigitalClockBox;
- BOOL DigitalClockBoxValid = FALSE;
-
- UBYTE *DateFormatLabels[6];
- UBYTE *ScreenSelectionLabels[6];
-
- /************************************************************************
- ********************** CREATEDIGITALCLOCKWINDOW() *********************
- *************************************************************************
- * Create the digital clock window object tree. Returns the window object
- * ptr or NULL if create failed. Gadgets are initialised with default
- * values, InitDigitalClockGadgets must be called after window opened to
- * reflect current settings.
- *
- *************************************************************************/
-
- APTR CreateDigitalClockWindow(void)
- {
- Object *obj;
-
- /* put localised strings into dateformat cycle gadget labels */
-
- DateFormatLabels[0] = getString(DATE_FORMAT_DOS);
- DateFormatLabels[1] = getString(DATE_FORMAT_INT);
- DateFormatLabels[2] = getString(DATE_FORMAT_USA);
- DateFormatLabels[3] = getString(DATE_FORMAT_CDN);
- DateFormatLabels[4] = getString(DATE_FORMAT_LOCALE);
- DateFormatLabels[5] = NULL;
-
- /* put localised strings into screenselection cycle gadget labels */
-
- ScreenSelectionLabels[0] = getString(WORKBENCH_SCREEN);
- ScreenSelectionLabels[1] = getString(FRONT_SCREEN);
- ScreenSelectionLabels[2] = getString(FRONT_PUBSCREEN);
- ScreenSelectionLabels[3] = getString(DEF_PUBSCREEN);
- ScreenSelectionLabels[4] = getString(BY_SCREEN_TITLE_OPT);
- ScreenSelectionLabels[5] = NULL;
-
- obj = WindowObject,
- WINDOW_PubScreenName, PubScreenName,
- WINDOW_Title, getString(DigitalClock),
- WINDOW_ScreenTitle, getString(COPYRIGHT_STRING),
- WINDOW_SmartRefresh, TRUE,
- WINDOW_SizeBottom, FALSE, /* put size gadget in right border */
- WINDOW_SizeRight, TRUE,
- WINDOW_AutoAspect, TRUE, /* automatic edges pixel width */
- WINDOW_Position, POS_CENTERMOUSE,
- (DigitalClockBoxValid ? WINDOW_Bounds : TAG_IGNORE), &DigitalClockBox,
- WINDOW_AppWindow, TRUE, /* make it an appwindow */
- WINDOW_RMBTrap, TRUE, /* trap rmb - no menu */
- WINDOW_CloseGadget, FALSE, /* no windowclose gadget please */
- (TextFont ? WINDOW_Font : TAG_IGNORE), &Attr, /* use font if specified */
- WINDOW_HelpFile, PrefsHelp, /* online help system */
- WINDOW_HelpNode, "Digital Clock",
- WINDOW_MasterGroup,
- VGroupObject, Spacing(4), HOffset(4), VOffset(4),
- StartMember,
- CH_DC_State = CheckBoxObject,
- LAB_Label, getString(STATE_ACTIVE_STRING),
- LAB_Place, PLACE_LEFT,
- GA_ID, GD_DC_State,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinSize,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- HGroupObject, Spacing(4),
- StartMember,
- VGroupObject, Spacing(4),
- StartMember,
- INT_DC_Offset = StringObject,
- LAB_Label, getString(DigitalClockOffset_STRING),
- RidgeFrame,
- STRINGA_LongVal,0,
- STRINGA_MaxChars,4,
- STRINGA_MinCharsVisible,6,
- STRINGA_Justification,STRINGRIGHT,
- GA_ID, GD_DC_Offset,
- GA_TabCycle, TRUE,
- EndObject,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- CH_DC_ShowDate = CheckBoxObject,
- LAB_Label, getString(DigitalClockShowDate_STRING),
- LAB_Place, PLACE_LEFT,
- GA_ID, GD_DC_ShowDate,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinSize,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- CH_DC_ShowSecs = CheckBoxObject,
- LAB_Label, getString(DigitalClockShowSecs_STRING),
- LAB_Place, PLACE_LEFT,
- GA_ID, GD_DC_ShowSecs,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinSize,
- EndMember,
- EndObject,
- EndMember,
- StartMember,
- VGroupObject, Spacing(4),
- StartMember,
- INT_DC_Interval = StringObject,
- LAB_Label, getString(DigitalClockInterval_STRING),
- RidgeFrame,
- STRINGA_LongVal,0,
- STRINGA_MaxChars,4,
- STRINGA_MinCharsVisible,6,
- STRINGA_Justification,STRINGRIGHT,
- GA_ID, GD_DC_Interval,
- GA_TabCycle, TRUE,
- EndObject,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- CH_DC_ShowDay = CheckBoxObject,
- LAB_Label, getString(DigitalClockShowDay_STRING),
- LAB_Place, PLACE_LEFT,
- GA_ID, GD_DC_ShowDay,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinSize,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- CH_DC_ShortDay = CheckBoxObject,
- LAB_Label, getString(DigitalClockShortDay_STRING),
- LAB_Place, PLACE_LEFT,
- GA_ID, GD_DC_ShortDay,
- ButtonFrame,
- FRM_Flags, FRF_EDGES_ONLY,
- EndObject, FixMinSize,
- EndMember,
- EndObject,
- EndMember,
- EndObject, Weight(DEFAULT_WEIGHT*3),
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- CYC_DC_DateFormat = CycleObject,
- LAB_Label, getString(DigitalClockDateFormat_STRING),
- GA_ID, GD_DC_DateFormat,
- ButtonFrame,
- CYC_Labels, DateFormatLabels,
- CYC_Popup, TRUE, /* "drop-down" menu */
- EndObject,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- STR_DC_LocaleDateFormat = StringObject,
- LAB_Label, getString(DigitalClockLocaleDateFormat_STRING),
- STRINGA_MaxChars, 256,
- GA_ID, GD_DC_LocaleDateFormat,
- RidgeFrame,
- EndObject,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- CYC_DC_ScreenSelection = CycleObject,
- LAB_Label, getString(DigitalClockScreenSelection_STRING),
- GA_ID, GD_DC_ScreenSelection,
- ButtonFrame,
- CYC_Labels, ScreenSelectionLabels,
- CYC_Popup, TRUE, /* "drop-down" menu */
- EndObject,
- EndMember,
- VarSpace(DEFAULT_WEIGHT/10),
- StartMember,
- STR_DC_ScreenPattern = StringObject,
- LAB_Label, getString(DigitalClockScreenPattern_STRING),
- STRINGA_MaxChars, PATLEN,
- GA_ID, GD_DC_ScreenPattern,
- RidgeFrame,
- EndObject,
- EndMember,
- StartMember,
- HorizSeparator,
- EndMember,
- StartMember,
- HGroupObject,
- VarSpace(DEFAULT_WEIGHT),
- StartMember,
- BT_DC_OK = Button(getString(OK_STRING),GD_DC_OK),
- EndMember,
- VarSpace(DEFAULT_WEIGHT),
- EndObject,
- EndMember,
- EndObject,
- EndObject;
-
-
- if (obj)
- {
- /* set tab cycle order between string gadgets */
- DoMethod(obj,WM_TABCYCLE_ORDER,
- INT_DC_Offset,
- INT_DC_Interval,
- STR_DC_LocaleDateFormat,
- STR_DC_ScreenPattern,
- NULL);
- }
-
- return(obj);
- }
-
- /************************************************************************
- ********************** CLOSEDIGITALCLOCKWINDOW() **********************
- *************************************************************************
- * Close the digital clock window, disposing of the window object.
- *
- *************************************************************************/
-
- void CloseDigitalClockWindow(void)
- {
- if (DigitalClockWnd)
- {
- GetAttr(WINDOW_Bounds,DigitalClockWndObj,(ULONG *) &DigitalClockBox);
- DigitalClockBoxValid = TRUE;
- }
-
- DisposeObject(DigitalClockWndObj);
- DigitalClockWndObj = NULL;
- DigitalClockWnd = NULL;
- }
-
- /************************************************************************
- ********************* INITDIGITALCLOCKGADGETS() ***********************
- *************************************************************************
- * Initialize the digital clock window gadgets to reflect current
- * settings.
- *
- *************************************************************************/
-
- static void InitDigitalClockGadgets(void)
- {
- BOOL UseLocale;
-
- InitWindowGadget(GDX_DC_State, GA_Selected, DC_V_Config.State, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_Offset, STRINGA_LongVal, DC_V_Config.Offset, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_Interval, STRINGA_LongVal, DC_V_Config.Interval, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShowDate, GA_Selected, DC_V_Config.ShowDate, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShowDay, GA_Selected, DC_V_Config.ShowDay, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShortDay, GA_Selected, DC_V_Config.ShortDay, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShowSecs, GA_Selected, DC_V_Config.ShowSecs, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_DateFormat, CYC_Active, DC_V_Config.DateFormat, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_LocaleDateFormat, STRINGA_TextVal, (LONG)DC_V_Config.LocaleDateFormat, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ScreenPattern, STRINGA_TextVal, (LONG)DC_V_Config.ScreenPatternData.patstr, DIGITALCLOCK_WINDOW);
-
- if (DC_V_Config.State == DC_C_ACTIVE)
- {
- InitWindowGadget(GDX_DC_Offset, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_Interval, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
-
- UseLocale = (DC_V_Config.DateFormat == DC_C_LocaleDateFormat);
-
- InitWindowGadget(GDX_DC_ShowDate, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShowDay, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
-
- if (UseLocale)
- InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
- else
- InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, (DC_V_Config.ShowDay == FALSE), DIGITALCLOCK_WINDOW);
-
- InitWindowGadget(GDX_DC_ShowSecs, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_DateFormat, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_LocaleDateFormat, GA_Disabled, !UseLocale, DIGITALCLOCK_WINDOW);
-
- InitWindowGadget(GDX_DC_ScreenSelection, CYC_Active, DC_V_Config.ScreenSelection, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ScreenSelection, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ScreenPattern, GA_Disabled,
- (DC_V_Config.ScreenSelection != DC_C_ScreensByPattern), DIGITALCLOCK_WINDOW);
- }
- else
- {
- InitWindowGadget(GDX_DC_Offset, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_Interval, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShowDate, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShowDay, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ShowSecs, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_DateFormat, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_LocaleDateFormat, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ScreenSelection, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- InitWindowGadget(GDX_DC_ScreenPattern, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
- }
- }
-
- /************************************************************************
- ******************** HANDLEDIGITALCLOCKRETURNID() *********************
- *************************************************************************
- * Handle msgs arriving at digital clock window - supply the ID returned
- * by BGUI. Returns either RET_OKAY or RET_QUIT.
- *
- *************************************************************************/
-
- LONG HandleDigitalClockReturnID(LONG id)
- {
- LONG ret,num;
-
- ret = RET_OKAY;
-
- switch(id)
- {
- case GD_DC_OK:
- CloseDigitalClockWindow();
- if (!ShowWindowID(ROOT_WINDOW))
- ret= RET_QUIT;
- break;
-
- case GD_DC_State:
- DC_V_Config.State ^= TRUE;
- InitDigitalClockGadgets();
- break;
-
- case GD_DC_Offset:
- GetAttr(STRINGA_LongVal,INT_DC_Offset,(ULONG *)&num);
- if (num >= 0)
- DC_V_Config.Offset = num;
- else
- DisplayBeep(DigitalClockWnd->WScreen);
- InitWindowGadget(GDX_DC_Offset, STRINGA_LongVal, DC_V_Config.Offset, DIGITALCLOCK_WINDOW);
- break;
-
- case GD_DC_Interval:
- GetAttr(STRINGA_LongVal,INT_DC_Interval,(ULONG *)&num);
- if (num > 0)
- DC_V_Config.Interval = num;
- else
- DisplayBeep(DigitalClockWnd->WScreen);
- InitWindowGadget(GDX_DC_Interval, STRINGA_LongVal, DC_V_Config.Interval, DIGITALCLOCK_WINDOW);
- break;
-
- case GD_DC_ShowDate:
- DC_V_Config.ShowDate ^= TRUE;
- break;
-
- case GD_DC_ShowDay:
- DC_V_Config.ShowDay ^= TRUE;
- InitDigitalClockGadgets();
- break;
-
- case GD_DC_ShortDay:
- DC_V_Config.ShortDay ^= TRUE;
- break;
-
- case GD_DC_ShowSecs:
- DC_V_Config.ShowSecs ^= TRUE;
- break;
-
- case GD_DC_DateFormat:
- GetAttr(CYC_Active,CYC_DC_DateFormat,(ULONG *)&num);
- DC_V_Config.DateFormat = num;
- InitDigitalClockGadgets();
- break;
-
- case GD_DC_LocaleDateFormat:
- if (DC_V_Config.LocaleDateFormat)
- {
- FreeVec(DC_V_Config.LocaleDateFormat);
- }
-
- GetAttr(STRINGA_TextVal,STR_DC_LocaleDateFormat,(ULONG *)&num);
- if (num)
- DC_V_Config.LocaleDateFormat = DupStr((char *)num);
- break;
-
- case GD_DC_ScreenSelection:
- GetAttr(CYC_Active,CYC_DC_ScreenSelection,(ULONG *)&num);
- DC_V_Config.ScreenSelection = num;
- InitDigitalClockGadgets();
- break;
-
- case GD_DC_ScreenPattern:
- NewPattern(GDX_DC_ScreenPattern, &DC_V_Config.ScreenPatternData,
- (struct Gadget *)STR_DC_ScreenPattern, DIGITALCLOCK_WINDOW);
- break;
-
- default:
- break;
- }
-
- return(ret);
- }
-
- /************************************************************************
- ********************** SHOWDIGITALCLOCKWINDOW() ***********************
- *************************************************************************
- * Create and open the DigitalClock window and initialize the gadgets to
- * reflect current settings. Sets up HandleReturnID function, curwin,
- * curwinobj and curwinID. Returns TRUE or FALSE to indicate success.
- *
- *************************************************************************/
-
- BOOL ShowDigitalClockWindow(void)
- {
- if (DigitalClockWndObj = (Object *)CreateDigitalClockWindow())
- {
- if (DigitalClockWnd = WindowOpen(DigitalClockWndObj))
- {
- InitDigitalClockGadgets();
- HandleReturnID = HandleDigitalClockReturnID;
- curwin = DigitalClockWnd;
- curwinobj = DigitalClockWndObj;
- curwinID = DIGITALCLOCK_WINDOW;
- return(TRUE);
- }
- }
-
- CloseDigitalClockWindow();
- curwin = NULL;
- curwinobj = NULL;
- wndsigflag = 0L;
- appwinsigflag = 0L;
- return(FALSE);
- }
-
-